# ifndef __POLIGONO__H_

# define __POLIGONO__H_

# include "figura.h"

# include "punto.h"

# include "linea.h"

# include <list>

class Poligono: public Figura
{
	public:
	
		Poligono();
		
		Poligono(Punto, Punto, Punto);
		
		Poligono(Punto[], int);
		
		Poligono(const Poligono &p): Figura(p), puntos(p.puntos), invX(p.invX), invY(p.invY)
		{
		};
		
		~Poligono()
		{
			for (list<Punto>::iterator i = puntos.begin(); i != puntos.end(); i++)
			{
				i->~Punto();
			}
		};
		
		void trasladar(float, float);
		
		void redimensionar(float, float);
		
		void addPunto(Punto p)
		{
			puntos.push_back(p);
		};
		
		list<Punto> getPuntos() 
		{
			return (puntos);
		};
		
		virtual Punto supIzq();
		
		virtual Punto infDer();
		
		virtual string Texto(int = 0);
		
		virtual bool contenida (Punto, Punto);
		
		virtual bool seleccionar (float, float);
		
		virtual Poligono* clonar ()
		{
			return (new Poligono (*this));
		};
	
		virtual list<Figura*> pintar();
		
	private:
		
		list<Punto> puntos;
		
		bool invX, invY;
		
		bool signo (float x)
		{
			if (x < 0)
			{
				return false;
			}
			
			else
			{
				return true;
			}
		}
};

# endif
